package avicit.im.lantop.basic.fieldmapset.action.service;

import avicit.im.lantop.basic.fieldmapset.domain.LantopConditionSet;
import avicit.im.lantop.basic.fieldmapset.domain.LantopFieldRelateSet;
import avicit.im.lantop.basic.libstructuredefine.domain.LantopArchiveClassT;
import avicit.platform6.commons.utils.web.TreeNode;
import avicit.platform6.core.dao.Paging;
import avicit.platform6.core.jdbc.Page;
import com.github.pagehelper.Page;

import java.util.List;
import java.util.Map;

/**
 * <p>金航数码科技有限责任公司</p>
 * <p>作者：钟一华</p>
 * <p>邮箱：zhongyih@avicit.com</p>
 * <p>创建时间： 2015-11-3 下午2:17:06 </p>
 * <p>类说明：字段对应设置接口</p>
 * <p>修改记录： </p>
 */
public interface LantopFieldMapSetService {

	/**
	 * 根据当前人对应组织构建根节点
	 * 
	 * @author 朱锋
	 * @param deptId
	 * @return
	 * @throws Exception
	 *             LantopArchiveClassT
	 * @throws
	 */
	public LantopArchiveClassT getRootLantopArchiveTabClassVByType(String deptId) throws Exception;

	/**
	 * 判断是否存在根节点
	 * 
	 * @author 朱锋
	 * @param deptId
	 * @return int
	 * @throws
	 */
	public int getParentNodeByParentId(String deptId);

	/**
	 * 递归获取Tree当前节点下数据
	 * 
	 * @author 朱锋
	 * @param id
	 * @param level
	 * @return List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> recurFindTreeNodesByParentId(String id, int level);

	/**
	 * 获取字段对应设置数据
	 * 
	 * @author 朱锋
	 * @param page
	 * @param parameter
	 * @return Page<Map<String,Object>>
	 * @throws
	 */
	public Page<Map<String, Object>> getPageRelateSetList(Paging<LantopFieldRelateSet> page, Map<String, Object> parameter) throws Exception;

	/**
	 * 根据PARENTID获取档案分类信息
	 * 
	 * @author 朱锋
	 * @param parentId
	 * @return List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getArchiveClassName(String parentId);

	/**
	 * 删除字段对应设置
	 * 
	 * @author 朱锋
	 * @param ids
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void deleteMapSet(String ids) throws Exception;

	/**
	 * 查询对应设置主表信息ID
	 * 
	 * @author 朱锋
	 * @param myTableId
	 * @param elseTableId
	 * @param tgtNodeId
	 * @param sysId
	 * @param tgtOrsource
	 * @return
	 * @throws Exception
	 *             String
	 * @throws
	 */
	public String getRelateSetIdByIds(String sourceTableId, String tgtTableId, String tgtNodeId, String sysId, String tgtOrsource) throws Exception;

	/**
	 * 新增字段对应设置主表信息
	 * 
	 * @author 朱锋
	 * @param relateSetId
	 * @param sourceTableId
	 * @param tgtTableId
	 * @param tgtNodeId
	 * @param sysId
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void insertRelateSet(String relateSetId, String sourceTableId, String tgtTableId, String tgtNodeId, String sysId, String type) throws Exception;

	/**
	 * 新增字段对应信息
	 * 
	 * @author 朱锋
	 * @param rowDatas
	 * @param relateSetId
	 * @param sourceTableId
	 * @param tgtTableId
	 * @param sysId
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void insertRelateSetItem(String rowDatas, String relateSetId, String sysId) throws Exception;

	/**
	 * 获取源表列中文名
	 * 
	 * @author 朱锋
	 * @param relateSetId
	 * @param tnameCn
	 * @return
	 * @throws Exception
	 *             String[]
	 * @throws
	 */
	public List<Object[]> getSourceColByRidAndTcn(String relateSetId, String tnameCn) throws Exception;

	/**
	 * 获取条件设置数据
	 * 
	 * @author 朱锋
	 * @param page
	 * @param parameter
	 * @return Page<Map<String,Object>>
	 * @throws
	 */
	public Page<Map<String, Object>> getPageRConditionSetList(Paging<LantopConditionSet> page, Map<String, Object> parameter) throws Exception;

	/**
	 * 判断是否已经存在物理表节点的条件设置记录
	 * 
	 * @author 朱锋
	 * @param id
	 * @return
	 * @throws Exception
	 *             String
	 * @throws
	 */
	public boolean getFlagConditionSet(String id) throws Exception;

	/**
	 * 获取档案分类树信息：树形展示（文件夹、模板、数据节点、物理表）
	 * 
	 * @author 朱锋
	 * @param orgId
	 * @param deptId
	 * @return
	 * @throws Exception
	 *             List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> getArchiveClassTreeNodeToTableInfoByCondition(String orgId, String deptId) throws Exception;

	/**
	 * 新增条件设置信息
	 * 
	 * @author 朱锋
	 * @param json
	 * @param sysId
	 * @param lantopFieldRelateSetId
	 * @return
	 * @throws Exception
	 *             Map<String,String>
	 * @throws
	 */
	public Map<String, String> insertConditionSet(String json, String sysId, String lantopFieldRelateSetId) throws Exception;

	/**
	 * 根据字段对应设置ID，删除条件设置信息
	 * 
	 * @author 朱锋
	 * @param lantopFieldRelateSetId
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void deleteConditionSetByRelateSetId(String lantopFieldRelateSetId) throws Exception;

	/**
	 * 更新字段对应设置表SQL部分数据
	 * 
	 * @author 朱锋
	 * @param checkNodeIds
	 * @param temId
	 * @param list
	 * @param sysId
	 *            void
	 * @throws
	 */
	public void updateRelateSetSqlByList(String checkNodeIds, String temId, List<Map<String, String>> list, String sysId) throws Exception;

	/**
	 * 删除条件设置信息
	 * 
	 * @author 朱锋
	 * @param ids
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void deleteConditionSet(String ids) throws Exception;

	/**
	 * 根据字段对应设置ID获取源表ID
	 * 
	 * @author 朱锋
	 * @param id
	 * @return
	 * @throws Exception
	 *             String
	 * @throws
	 */
	public String getSourceTabIdByRetaleIdSetId(String id) throws Exception;

	/**
	 * 根据字段对应设置主表ID获取条件设置信息
	 * 
	 * @author 朱锋
	 * @param relateSetId
	 * @return List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getConditionByRetaleIdSetId(String relateSetId) throws Exception;

	/**
	 * 获取选择库表树NODES
	 * 
	 * @author 朱锋
	 * @param id
	 * @param level
	 * @return
	 * @throws Exception
	 *             List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> selectTableFindTreeNodesByParentId(String id, String type, String flag, String sOrt, String orgId) throws Exception;

	/**
	 * 目标节点获取树
	 * @author 朱锋
	 * @param id
	 * @param rid
	 * @return
	 * @throws Exception List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> findTreeNodesByParentId(String id, String rid, String orgId) throws Exception;

	/**
	 * 验证该表是否存在字段对应设置信息 （0-正常 1-没有字段对应设置主表信息 2-没有字段对应设置字表信息）
	 * @author 朱锋
	 * @param tableId
	 * @return
	 * @throws Exception int
	 * @throws
	 */
	public int checkMapSetItem(String tableId) throws Exception;

	/***
	 * 根据当前节点ID查询parentId
	 * 
	 * @param id
	 * @return
	 * @throws Exception
	 */
	public String findParentIdById(String id) throws Exception;
	
	/**
	 * 根据tabId和colId删除字段对应设置信息并更新大试图
	 * @author 郭亮
	 * @param param
	 * 				p1: key:tableId
	 * 				p2: key:colId
	 * 				p3: key:orgId
	 * @throws Exception int
	 */
	public int deleteRelateSetItemBytabIdAndColId(Map<String, String> param) throws Exception;
	
	/**
	 * 获取公共字段信息
	 * @return List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getPublicFieldInfo() throws Exception;
	
}
